package main.java.indi.zyj.hot100;

import java.util.Deque;
import java.util.LinkedList;

public class _60_longestValidParentheses {
    public int longestValidParentheses(String s) {
        int maxans = 0;
        int[] dp = new int[s.length()];
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) == ')'){
                if (s.charAt(i - 1) == '('){
                    if (i >= 2){
                        // 说明这个括号前面还有括号
                        dp[i] = dp[i - 2] + 2;
                    }else {
                        dp[i] = 2;
                    }
                } else if (i - dp[i - 1] > 0 && s.charAt(i - dp[i - 1] - 1) == '(') { //  ()(())
                    if (i - dp[i - 1] >= 2){
                        // 说明是()(())  需要（（）。。）里面的值 +（）（（））最左边之前的dp值 + 本次（）的值
                        dp[i] = dp[i - 1] + dp[i - dp[i - 1] - 2] + 2;
                    }else {
                        // 说明是(())
                        dp[i] = dp[i - 1] + 2;
                    }
                }
                maxans = Math.max(maxans, dp[i]);
            }
        }
        return maxans;
    }
}
